home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgramD2.iso / Borland / Borland C++ V5.02 / RTLWIN32.PAK / SNMP.H < prev    next >
C/C++ Source or Header  |  1997-05-06  |  17KB  |  437 lines

  1. /*++
  2.  
  3. Copyright (C) 1992-1996 Microsoft Corporation
  4.  
  5. Module Name:
  6.  
  7.     snmp.h
  8.  
  9. Abstract:
  10.  
  11.     Definitions for SNMP Extension Agent development.
  12.  
  13. --*/
  14.  
  15. #ifndef _INC_SNMP
  16. #define _INC_SNMP
  17. #pragma option -b
  18.  
  19. ///////////////////////////////////////////////////////////////////////////////
  20. //                                                                           //
  21. // Additional header files                                                   //
  22. //                                                                           //
  23. ///////////////////////////////////////////////////////////////////////////////
  24.  
  25. #pragma option -b.
  26. #include <windows.h>
  27. #pragma option -b
  28.  
  29. #ifdef __cplusplus
  30. extern "C" {
  31. #endif
  32.  
  33. ///////////////////////////////////////////////////////////////////////////////
  34. //                                                                           //
  35. // SNMP API return type definitions                                          //
  36. //                                                                           //
  37. ///////////////////////////////////////////////////////////////////////////////
  38.  
  39. #define SNMPAPI                         INT
  40. #define SNMP_FUNC_TYPE                  WINAPI
  41.  
  42. ///////////////////////////////////////////////////////////////////////////////
  43. //                                                                           //
  44. // SNMP API return code definitions                                          //
  45. //                                                                           //
  46. ///////////////////////////////////////////////////////////////////////////////
  47.  
  48. #define SNMPAPI_NOERROR                 TRUE
  49. #define SNMPAPI_ERROR                   FALSE
  50.  
  51. ///////////////////////////////////////////////////////////////////////////////
  52. //                                                                           //
  53. // SNMP API error code definitions                                           //
  54. //                                                                           //
  55. ///////////////////////////////////////////////////////////////////////////////
  56.  
  57. #define SNMP_MEM_ALLOC_ERROR            1
  58.  
  59. ///////////////////////////////////////////////////////////////////////////////
  60. //                                                                           //
  61. // BER API error code definitions                                            //
  62. //                                                                           //
  63. ///////////////////////////////////////////////////////////////////////////////
  64.  
  65. #define SNMP_BERAPI_INVALID_LENGTH      10
  66. #define SNMP_BERAPI_INVALID_TAG         11
  67. #define SNMP_BERAPI_OVERFLOW            12
  68. #define SNMP_BERAPI_SHORT_BUFFER        13
  69. #define SNMP_BERAPI_INVALID_OBJELEM     14
  70.  
  71. ///////////////////////////////////////////////////////////////////////////////
  72. //                                                                           //
  73. // PDU API error code definitions                                            //
  74. //                                                                           //
  75. ///////////////////////////////////////////////////////////////////////////////
  76.  
  77. #define SNMP_PDUAPI_UNRECOGNIZED_PDU    20
  78. #define SNMP_PDUAPI_INVALID_ES          21
  79. #define SNMP_PDUAPI_INVALID_GT          22
  80.  
  81. ///////////////////////////////////////////////////////////////////////////////
  82. //                                                                           //
  83. // AUTH API error code definitions                                           //
  84. //                                                                           //
  85. ///////////////////////////////////////////////////////////////////////////////
  86.  
  87. #define SNMP_AUTHAPI_INVALID_VERSION    30
  88. #define SNMP_AUTHAPI_INVALID_MSG_TYPE   31
  89. #define SNMP_AUTHAPI_TRIV_AUTH_FAILED   32
  90.  
  91. ///////////////////////////////////////////////////////////////////////////////
  92. //                                                                           //
  93. // SNMP PDU error status definitions                                         //
  94. //                                                                           //
  95. ///////////////////////////////////////////////////////////////////////////////
  96.  
  97. #define SNMP_ERRORSTATUS_NOERROR        0
  98. #define SNMP_ERRORSTATUS_TOOBIG         1
  99. #define SNMP_ERRORSTATUS_NOSUCHNAME     2
  100. #define SNMP_ERRORSTATUS_BADVALUE       3
  101. #define SNMP_ERRORSTATUS_READONLY       4
  102. #define SNMP_ERRORSTATUS_GENERR         5
  103.  
  104. ///////////////////////////////////////////////////////////////////////////////
  105. //                                                                           //
  106. // SNMP PDU generic trap definitions                                         //
  107. //                                                                           //
  108. ///////////////////////////////////////////////////////////////////////////////
  109.  
  110. #define SNMP_GENERICTRAP_COLDSTART      0
  111. #define SNMP_GENERICTRAP_WARMSTART      1
  112. #define SNMP_GENERICTRAP_LINKDOWN       2
  113. #define SNMP_GENERICTRAP_LINKUP         3
  114. #define SNMP_GENERICTRAP_AUTHFAILURE    4
  115. #define SNMP_GENERICTRAP_EGPNEIGHLOSS   5
  116. #define SNMP_GENERICTRAP_ENTERSPECIFIC  6
  117.  
  118. ///////////////////////////////////////////////////////////////////////////////
  119. //                                                                           //
  120. // BER encoding definitions                                                  //
  121. //                                                                           //
  122. ///////////////////////////////////////////////////////////////////////////////
  123.  
  124. #define ASN_UNIVERSAL                   0x00
  125. #define ASN_APPLICATION                 0x40
  126. #define ASN_CONTEXTSPECIFIC             0x80
  127. #define ASN_PRIVATE                     0xC0
  128.  
  129. #define ASN_PRIMATIVE                   0x00
  130. #define ASN_CONSTRUCTOR                 0x20
  131.  
  132. //
  133. // For BER tags with a number ranging from 0 to 30 (inclusive), the
  134. // identifier octets consists of a single octet encoded as follows:
  135. //
  136. //   7 6 5 4 3 2 1 0
  137. //  +---+-+---------+
  138. //  |Cls|P| Tag Num |
  139. //  +---+-+---------+
  140. //
  141. //  where
  142. //
  143. //      Cls - is the class of the tag
  144. //
  145. //          00 - universal
  146. //          01 - application
  147. //          10 - context-specific
  148. //          11 - private
  149. //
  150. //      P - indicates whether encoding is primitive
  151. //
  152. //           0 - primitive
  153. //           1 - constructed
  154. //
  155. //      Tag Num - is the number of the tag
  156. //
  157.  
  158. ///////////////////////////////////////////////////////////////////////////////
  159. //                                                                           //
  160. // ASN.1 simple types                                                        //
  161. //                                                                           //
  162. ///////////////////////////////////////////////////////////////////////////////
  163.  
  164. #define ASN_INTEGER                (ASN_UNIVERSAL|ASN_PRIMATIVE|0x02)
  165. #define ASN_OCTETSTRING            (ASN_UNIVERSAL|ASN_PRIMATIVE|0x04)
  166. #define ASN_NULL                   (ASN_UNIVERSAL|ASN_PRIMATIVE|0x05)
  167. #define ASN_OBJECTIDENTIFIER       (ASN_UNIVERSAL|ASN_PRIMATIVE|0x06)
  168.  
  169. ///////////////////////////////////////////////////////////////////////////////
  170. //                                                                           //
  171. // ASN.1 constructor types                                                   //
  172. //                                                                           //
  173. ///////////////////////////////////////////////////////////////////////////////
  174.  
  175. #define ASN_SEQUENCE               (ASN_UNIVERSAL|ASN_CONSTRUCTOR|0x10)
  176. #define ASN_SEQUENCEOF             ASN_SEQUENCE
  177.  
  178. ///////////////////////////////////////////////////////////////////////////////
  179. //                                                                           //
  180. // ASN.1 application specific primatives                                     //
  181. //                                                                           //
  182. ///////////////////////////////////////////////////////////////////////////////
  183.  
  184. #define ASN_RFC1155_IPADDRESS      (ASN_APPLICATION|ASN_PRIMATIVE|0x00)
  185. #define ASN_RFC1155_COUNTER        (ASN_APPLICATION|ASN_PRIMATIVE|0x01)
  186. #define ASN_RFC1155_GAUGE          (ASN_APPLICATION|ASN_PRIMATIVE|0x02)
  187. #define ASN_RFC1155_TIMETICKS      (ASN_APPLICATION|ASN_PRIMATIVE|0x03)
  188. #define ASN_RFC1155_OPAQUE         (ASN_APPLICATION|ASN_PRIMATIVE|0x04)
  189. #define ASN_RFC1213_DISPSTRING     ASN_OCTETSTRING
  190.  
  191. ///////////////////////////////////////////////////////////////////////////////
  192. //                                                                           //
  193. // ASN.1 application specific constructors                                   //
  194. //                                                                           //
  195. ///////////////////////////////////////////////////////////////////////////////
  196.  
  197. #define ASN_RFC1157_GETREQUEST     (ASN_CONTEXTSPECIFIC|ASN_CONSTRUCTOR|0x00)
  198. #define ASN_RFC1157_GETNEXTREQUEST (ASN_CONTEXTSPECIFIC|ASN_CONSTRUCTOR|0x01)
  199. #define ASN_RFC1157_GETRESPONSE    (ASN_CONTEXTSPECIFIC|ASN_CONSTRUCTOR|0x02)
  200. #define ASN_RFC1157_SETREQUEST     (ASN_CONTEXTSPECIFIC|ASN_CONSTRUCTOR|0x03)
  201. #define ASN_RFC1157_TRAP           (ASN_CONTEXTSPECIFIC|ASN_CONSTRUCTOR|0x04)
  202.  
  203. ///////////////////////////////////////////////////////////////////////////////
  204. //                                                                           //
  205. // SNMP ASN type definitions                                                 //
  206. //                                                                           //
  207. ///////////////////////////////////////////////////////////////////////////////
  208.  
  209. typedef struct {
  210.     BYTE * stream;              // pointer to octet stream
  211.     UINT   length;              // number of octets in stream
  212.     BOOL   dynamic;             // true if octets must be freed
  213. } AsnOctetString;
  214.  
  215. typedef struct {
  216.     UINT   idLength;            // number of integers in oid
  217.     UINT * ids;                 // pointer to integer stream
  218. } AsnObjectIdentifier;
  219.  
  220. typedef LONG                    AsnInteger;
  221. typedef DWORD                   AsnCounter;
  222. typedef DWORD                   AsnGauge;
  223. typedef DWORD                   AsnTimeticks;
  224.  
  225. typedef AsnOctetString          AsnSequence;
  226. typedef AsnOctetString          AsnImplicitSequence;
  227. typedef AsnOctetString          AsnIPAddress;
  228. typedef AsnOctetString          AsnDisplayString;
  229. typedef AsnOctetString          AsnOpaque;
  230.  
  231. typedef AsnObjectIdentifier     AsnObjectName;
  232. typedef AsnIPAddress            AsnNetworkAddress;
  233.  
  234. typedef struct {
  235.     BYTE asnType;
  236.     union {
  237.         AsnInteger              number;
  238.         AsnOctetString          string;
  239.         AsnObjectIdentifier     object;
  240.         AsnSequence             sequence;
  241.         AsnIPAddress            address;
  242.         AsnCounter              counter;
  243.         AsnGauge                gauge;
  244.         AsnTimeticks            ticks;
  245.         AsnOpaque               arbitrary;
  246.     } asnValue;
  247. } AsnAny;
  248.  
  249. typedef AsnAny                  AsnObjectSyntax;
  250.  
  251. ///////////////////////////////////////////////////////////////////////////////
  252. //                                                                           //
  253. // SNMP API type definitions                                                 //
  254. //                                                                           //
  255. ///////////////////////////////////////////////////////////////////////////////
  256.  
  257. typedef struct vb {
  258.     AsnObjectName    name;      // variable's object identifer
  259.     AsnObjectSyntax  value;     // variable's value (in asn terms)
  260. } RFC1157VarBind;
  261.  
  262. typedef struct {
  263.     RFC1157VarBind * list;      // array of variable bindings
  264.     UINT             len;       // number of bindings in array
  265. } RFC1157VarBindList;
  266.  
  267. ///////////////////////////////////////////////////////////////////////////////
  268. //                                                                           //
  269. // SNMP API prototypes                                                       //
  270. //                                                                           //
  271. ///////////////////////////////////////////////////////////////////////////////
  272.  
  273. SNMPAPI
  274. SNMP_FUNC_TYPE
  275. SnmpUtilOidCpy(
  276.     OUT AsnObjectIdentifier *DstObjId,
  277.     IN  AsnObjectIdentifier *SrcObjId
  278.     );
  279.  
  280. SNMPAPI
  281. SNMP_FUNC_TYPE
  282. SnmpUtilOidAppend(
  283.     IN OUT AsnObjectIdentifier *DstObjId,
  284.     IN     AsnObjectIdentifier *SrcObjId
  285.     );
  286.  
  287. SNMPAPI
  288. SNMP_FUNC_TYPE
  289. SnmpUtilOidNCmp(
  290.     IN AsnObjectIdentifier *ObjIdA,
  291.     IN AsnObjectIdentifier *ObjIdB,
  292.     IN UINT                 Len
  293.     );
  294.  
  295. SNMPAPI
  296. SNMP_FUNC_TYPE
  297. SnmpUtilOidCmp(
  298.     IN AsnObjectIdentifier *ObjIdA,
  299.     IN AsnObjectIdentifier *ObjIdB
  300.     );
  301.  
  302. VOID
  303. SNMP_FUNC_TYPE
  304. SnmpUtilOidFree(
  305.     IN OUT AsnObjectIdentifier *ObjId
  306.     );
  307.  
  308. SNMPAPI
  309. SNMP_FUNC_TYPE
  310. SnmpUtilVarBindListCpy(
  311.     OUT RFC1157VarBindList *DstVarBindList,
  312.     IN  RFC1157VarBindList *SrcVarBindList
  313.     );
  314.  
  315. SNMPAPI
  316. SNMP_FUNC_TYPE
  317. SnmpUtilVarBindCpy(
  318.     OUT RFC1157VarBind *DstVarBind,
  319.     IN  RFC1157VarBind *SrcVarBind
  320.     );
  321.  
  322. VOID
  323. SNMP_FUNC_TYPE
  324. SnmpUtilVarBindListFree(
  325.     IN OUT RFC1157VarBindList *VarBindList
  326.     );
  327.  
  328. VOID
  329. SNMP_FUNC_TYPE
  330. SnmpUtilVarBindFree(
  331.     IN OUT RFC1157VarBind *VarBind
  332.     );
  333.  
  334. VOID
  335. SNMP_FUNC_TYPE
  336. SnmpUtilPrintAsnAny(
  337.     IN AsnAny *Any
  338.     );
  339.  
  340. VOID
  341. SNMP_FUNC_TYPE
  342. SnmpUtilMemFree(
  343.     IN OUT LPVOID Addr
  344.     );
  345.  
  346. LPVOID
  347. SNMP_FUNC_TYPE
  348. SnmpUtilMemAlloc(
  349.     IN UINT Size
  350.     );
  351.  
  352. LPVOID
  353. SNMP_FUNC_TYPE
  354. SnmpUtilMemReAlloc(
  355.     IN LPVOID Addr,
  356.     IN UINT   NewSize
  357.     );
  358.  
  359. ///////////////////////////////////////////////////////////////////////////////
  360. //                                                                           //
  361. // SNMP debugging definitions                                                //
  362. //                                                                           //
  363. ///////////////////////////////////////////////////////////////////////////////
  364.  
  365. #define SNMP_LOG_SILENT             0x0
  366. #define SNMP_LOG_FATAL              0x1
  367. #define SNMP_LOG_ERROR              0x2
  368. #define SNMP_LOG_WARNING            0x3
  369. #define SNMP_LOG_TRACE              0x4
  370. #define SNMP_LOG_VERBOSE            0x5
  371.  
  372. ///////////////////////////////////////////////////////////////////////////////
  373. //                                                                           //
  374. // SNMP debugging prototypes                                                 //
  375. //                                                                           //
  376. ///////////////////////////////////////////////////////////////////////////////
  377.  
  378. VOID
  379. SNMP_FUNC_TYPE
  380. SnmpUtilDbgPrint(
  381.     IN INT nLogLevel,               // see log levels above...
  382.     IN LPSTR szFormat,
  383.     IN ...
  384.     );
  385.  
  386. #if DBG
  387. #define SNMPDBG(_x_)                SnmpUtilDbgPrint _x_
  388. #else
  389. #define SNMPDBG(_x_)
  390. #endif
  391.  
  392. ///////////////////////////////////////////////////////////////////////////////
  393. //                                                                           //
  394. // Miscellaneous definitions                                                 //
  395. //                                                                           //
  396. ///////////////////////////////////////////////////////////////////////////////
  397.  
  398. #define SNMP_MAX_OID_LEN            0x7f00 // max number of elements in oid
  399.  
  400. ///////////////////////////////////////////////////////////////////////////////
  401. //                                                                           //
  402. // Support for old definitions (support disabled via SNMPSTRICT)             //
  403. //                                                                           //
  404. ///////////////////////////////////////////////////////////////////////////////
  405.  
  406. #ifndef SNMPSTRICT
  407.  
  408. #define SNMP_oidcpy                 SnmpUtilOidCpy
  409. #define SNMP_oidappend              SnmpUtilOidAppend
  410. #define SNMP_oidncmp                SnmpUtilOidNCmp
  411. #define SNMP_oidcmp                 SnmpUtilOidCmp
  412. #define SNMP_oidfree                SnmpUtilOidFree
  413.  
  414. #define SNMP_CopyVarBindList        SnmpUtilVarBindListCpy
  415. #define SNMP_FreeVarBindList        SnmpUtilVarBindListFree
  416. #define SNMP_CopyVarBind            SnmpUtilVarBindCpy
  417. #define SNMP_FreeVarBind            SnmpUtilVarBindFree
  418.  
  419. #define SNMP_printany               SnmpUtilPrintAsnAny
  420.  
  421. #define SNMP_free                   SnmpUtilMemFree
  422. #define SNMP_malloc                 SnmpUtilMemAlloc
  423. #define SNMP_realloc                SnmpUtilMemReAlloc
  424.  
  425. #define SNMP_DBG_free               SnmpUtilMemFree
  426. #define SNMP_DBG_malloc             SnmpUtilMemAlloc
  427. #define SNMP_DBG_realloc            SnmpUtilMemReAlloc
  428.  
  429. #endif // SNMPSTRICT
  430.  
  431. #ifdef __cplusplus
  432. }
  433. #endif
  434.  
  435. #pragma option -b.
  436. #endif // _INC_SNMP
  437.